home *** CD-ROM | disk | FTP | other *** search
/ Aminet 6 / Aminet 6 - June 1995.iso / Aminet / gfx / 3d / irit50src.lha / irit5 / scripts / crv_dist.irt < prev    next >
Encoding:
Text File  |  1994-12-20  |  7.4 KB  |  244 lines

  1. #
  2. # Curve - point/line/curve closest/"farest" location/intersection.
  3. #
  4. #                    Gershon Elber, May 1993.
  5. #
  6.  
  7. #
  8. # Curve point distance.
  9. #
  10. crv1 = cbspline( 3,
  11.          list( ctlpt( E2,  0.5, -1.0 ),
  12.                ctlpt( E2, -1.5, -0.5 ),
  13.                ctlpt( E2,  1.5,  0.0 ),
  14.                ctlpt( E2, -0.5,  1.0 ) ),
  15.          list( KV_OPEN ) );
  16. color( crv1, green );
  17. attrib( crv1, "width", 0.02 );
  18.  
  19. pt_param = crvptdst( crv1, point( 0, 0, 0 ), false, -0.001 );
  20. pt_extrem = nil();
  21. for ( i = 1, 1, sizeof( pt_param ),
  22.     pt = ceval( crv1, nth( pt_param, i ) ):
  23.     snoc( coerce( pt, vector_type ) , pt_extrem )
  24.     );
  25. interact( list( axes, crv1, pt_extrem ) );
  26.  
  27. pt_min = ceval( crv1, crvptdst( crv1, point( 0, 0, 0 ), true, 0.001 ) );
  28. interact( list( axes, crv1, coerce( pt_min, vector_type ) ) );
  29. pt_max = ceval( crv1, crvptdst( crv1, point( 0, 0, 0 ), false, 0.001 ) );
  30. interact( list( axes, crv1, coerce( pt_max, vector_type ) ) );
  31.  
  32. crv2 = cbspline( 3,
  33.          list( ctlpt( E2, 0,  1 ),
  34.                ctlpt( E2, 1, -1 ),
  35.                ctlpt( E2, 0, -1 ),
  36.                ctlpt( E2, 1,  1 ) ),
  37.          list( KV_OPEN ) );
  38. color( crv2, green );
  39. attrib( crv2, "width", 0.02 );
  40.  
  41. pt_param = crvptdst( crv2, point( 0, 0, 0 ), false, -0.001 );
  42. pt_extrem = nil();
  43. for ( i = 1, 1, sizeof( pt_param ),
  44.     pt = ceval( crv2, nth( pt_param, i ) ):
  45.     snoc( coerce( pt, vector_type ) , pt_extrem )
  46.     );
  47. interact( list( axes, crv2, pt_extrem ) );
  48.  
  49. pt_min = ceval( crv2, crvptdst( crv2, point( 0, 0, 0 ), true, 0.001 ) );
  50. interact( list( axes, crv2, coerce( pt_min, vector_type ) ) );
  51. pt_max = ceval( crv2, crvptdst( crv2, point( 0, 0, 0 ), false, 0.001 ) );
  52. interact( list( axes, crv2, coerce( pt_max, vector_type ) ) );
  53.  
  54. crv3a = cbspline( 3,
  55.           list( ctlpt( E2, 0.0,  1.0 ),
  56.                 ctlpt( E2, 0.1,  1.0 ),
  57.                 ctlpt( E2, 0.1,  0.1 ),
  58.                 ctlpt( E2, 0.5,  0.1 ),
  59.                 ctlpt( E2, 0.5, -0.1 ),
  60.                 ctlpt( E2, 0.1, -0.1 ),
  61.                 ctlpt( E2, 0.1, -1.0 ),
  62.                 ctlpt( E2, 0.0, -1.0 ) ),
  63.           list( KV_OPEN ) );
  64. crv3b = crv3a * rotz( 180 );
  65. crv3 = ( crv3a + crv3b ) * trans( vector( 0.1, 0.1, 0.0 ) );
  66. color( crv3, green );
  67. attrib( crv3, "width", 0.02 );
  68.  
  69. pt_param = crvptdst( crv3, point( 0, 0, 0 ), false, -0.001 );
  70. pt_extrem = nil();
  71. for ( i = 1, 1, sizeof( pt_param ),
  72.     pt = ceval( crv3, nth( pt_param, i ) ):
  73.     snoc( coerce( pt, vector_type ) , pt_extrem )
  74.     );
  75. interact( list( axes, crv3, pt_extrem ) );
  76.  
  77. pt_min = ceval( crv3, crvptdst( crv3, point( 0, 0, 0 ), true, 0.001 ) );
  78. interact( list( axes, crv3, coerce( pt_min, vector_type ) ) );
  79. pt_max = ceval( crv3, crvptdst( crv3, point( 0, 0, 0 ), false, 0.001 ) );
  80. interact( list( axes, crv3, coerce( pt_max, vector_type ) ) );
  81.  
  82. #
  83. # Curve line distance.
  84. #
  85. line_pt = point( -1, 1.2, 0 );
  86. line_vec = vector( 1, -1, 0 );
  87. line_pt2 = line_pt + ( line_vec * 2 );
  88. line = poly( list( line_pt, line_pt2 ), true );
  89. crv1 = cbspline( 3,
  90.          list( ctlpt( E2,  0.5, -1.0 ),
  91.                ctlpt( E2, -1.5, -0.5 ),
  92.                ctlpt( E2,  1.5,  0.0 ),
  93.                ctlpt( E2, -0.5,  1.0 ) ),
  94.          list( KV_OPEN ) );
  95. color( crv1, green );
  96. attrib( crv1, "width", 0.02 );
  97.  
  98. pt_param = crvlndst( crv1, line_pt, line_vec, false, -0.001 );
  99. pt_extrem = nil();
  100. for ( i = 1, 1, sizeof( pt_param ),
  101.     pt = ceval( crv1, nth( pt_param, i ) ):
  102.     snoc( pt, pt_extrem )
  103.     );
  104. interact( list( axes, crv1, line, pt_extrem ) );
  105.  
  106. pt_min = ceval( crv1, crvlndst( crv1, line_pt, line_vec, true, 0.001 ) );
  107. interact( list( axes, crv1, line, pt_min ) );
  108. pt_max = ceval( crv1, crvlndst( crv1, line_pt, line_vec, false, 0.001 ) );
  109. interact( list( axes, crv1, line, pt_max ) );
  110.  
  111. line_pt = point( -1, -1.5, 0 );
  112. line_vec = vector( 1, 2, 0 );
  113. line_pt2 = line_pt + ( line_vec * 2 );
  114. line = poly( list( line_pt, line_pt2 ), true );
  115. crv2 = cbspline( 3,
  116.          list( ctlpt( E2, 0,  1 ),
  117.                ctlpt( E2, 1, -1 ),
  118.                ctlpt( E2, 0, -1 ),
  119.                ctlpt( E2, 1,  1 ) ),
  120.          list( KV_OPEN ) );
  121. color( crv2, green );
  122. attrib( crv2, "width", 0.02 );
  123.  
  124. pt_param = crvlndst( crv2, line_pt, line_vec, false, -0.001 );
  125. pt_extrem = nil();
  126. for ( i = 1, 1, sizeof( pt_param ),
  127.     pt = ceval( crv2, nth( pt_param, i ) ):
  128.     snoc( pt, pt_extrem )
  129.     );
  130. interact( list( axes, crv2, line, pt_extrem ) );
  131.  
  132. pt_min = ceval( crv2, crvlndst( crv2, line_pt, line_vec, true, 0.001 ) );
  133. interact( list( axes, crv2, line, pt_min ) );
  134. pt_max = ceval( crv2, crvlndst( crv2, line_pt, line_vec, false, 0.001 ) );
  135. interact( list( axes, crv2, line, pt_max ) );
  136.  
  137. crv3a = cbspline( 3,
  138.           list( ctlpt( E2, 0.0,  1.0 ),
  139.                 ctlpt( E2, 0.1,  1.0 ),
  140.                 ctlpt( E2, 0.1,  0.1 ),
  141.                 ctlpt( E2, 0.5,  0.1 ),
  142.                 ctlpt( E2, 0.5, -0.1 ),
  143.                 ctlpt( E2, 0.1, -0.1 ),
  144.                 ctlpt( E2, 0.1, -1.0 ),
  145.                 ctlpt( E2, 0.0, -1.0 ) ),
  146.           list( KV_OPEN ) );
  147. crv3b = crv3a * rotz( 180 );
  148. crv3 = ( crv3a + crv3b ) * trans( vector( 0.1, 0.1, 0.0 ) );
  149. color( crv3, green );
  150. attrib( crv3, "width", 0.02 );
  151.  
  152. pt_param = crvlndst( crv3, line_pt, line_vec, false, -0.001 );
  153. pt_extrem = nil();
  154. for ( i = 1, 1, sizeof( pt_param ),
  155.     pt = ceval( crv3, nth( pt_param, i ) ):
  156.     snoc( pt, pt_extrem )
  157.     );
  158. interact( list( axes, crv3, line, pt_extrem ) );
  159.  
  160. pt_min = ceval( crv3, crvlndst( crv3, line_pt, line_vec, true, 0.001 ) );
  161. interact( list( axes, crv3, line, pt_min ) );
  162. pt_max = ceval( crv3, crvlndst( crv3, line_pt, line_vec, false, 0.001 ) );
  163. interact( list( axes, crv3, line, pt_max ) );
  164.  
  165. #
  166. # Curve curve intersetion/distance square scalar field.
  167. #
  168. crv1 = cbspline( 3,
  169.          list( ctlpt( E2, 0, 0 ),
  170.                ctlpt( E2, 0.25, 0.5 ),
  171.                ctlpt( E2, 0.5, 0.7 ),
  172.                ctlpt( E2, 1, 1 ) ),
  173.           list( 0.0, 0.0, 0.0, 0.5, 1.0, 1.0, 1.0 ) );
  174. crv2 = cbspline( 3,
  175.          list( ctlpt( E2, 1, 0 ),
  176.                ctlpt( E2, 0.7, 0.25 ),
  177.                ctlpt( E2, 0.3, 0.5 ),
  178.                ctlpt( E2, 0, 1 ) ),
  179.          list( 0.0, 0.0, 0.0, 0.5, 1.0, 1.0, 1.0 ) );
  180. inter_pts = ccinter( crv1, crv2, 0.0001, false );
  181. pt_inters = nil();
  182. pt = nil();
  183. for ( i = 1, 1, sizeof( inter_pts ),
  184.     pt = ceval( crv1, coord( nth( inter_pts, i ), 0 ) ):
  185.     snoc( pt, pt_inters ):
  186.     pt = ceval( crv2, coord( nth( inter_pts, i ), 1 ) ):
  187.     snoc( pt, pt_inters )
  188.     );
  189. interact( list( axes, crv1, crv2, pt_inters ) );
  190. dist_srf = ccinter( crv1, crv2, -1, true );
  191. color( dist_srf, magenta );
  192. interact( list( axes, dist_srf ) );
  193.  
  194. crv1 = cbspline( 3,
  195.          list( ctlpt( E2, 0, 0 ),
  196.                ctlpt( E2, 0.25, 2 ),
  197.                ctlpt( E2, 0.5, -1 ),
  198.                ctlpt( E2, 1, 1 ) ),
  199.          list( 0.0, 0.0, 0.0, 0.5, 1.0, 1.0, 1.0 ) );
  200. crv2 = cbspline( 3,
  201.          list( ctlpt( E2, 1, 0 ),
  202.                ctlpt( E2, -1, 0.25 ),
  203.                ctlpt( E2, 2, 0.5 ),
  204.                ctlpt( E2, 0, 1 ) ),
  205.          list( 0.0, 0.0, 0.0, 0.5, 1.0, 1.0, 1.0 ) );
  206.  
  207. inter_pts = ccinter( crv1, crv2, 0.001, false );
  208. pt_inters = nil();
  209. pt = nil();
  210. for ( i = 1, 1, sizeof( inter_pts ),
  211.     pt = ceval( crv1, coord( nth( inter_pts, i ), 0 ) ):
  212.     snoc( pt, pt_inters ):
  213.     pt = ceval( crv2, coord( nth( inter_pts, i ), 1 ) ):
  214.     snoc( pt, pt_inters )
  215.     );
  216. interact( list( axes, crv1, crv2, pt_inters ) );
  217. dist_srf = ccinter( crv1, crv2, -1, true );
  218. color( dist_srf, magenta );
  219. interact( list( axes, dist_srf ) );
  220.  
  221. crv1 = cbspline( 3,
  222.          list( ctlpt( E2, 0, 1 ),
  223.                ctlpt( E2, 1, 0 ),
  224.                ctlpt( E2, 0, 0 ),
  225.                ctlpt( E2, 1, 1 ) ),
  226.          list( 0.0, 0.0, 0.0, 0.5, 1.0, 1.0, 1.0 ) );
  227. inter_pts = ccinter( crv1, crv1, 0.001, true );
  228. pt_inters = nil();
  229. pt = nil();
  230. for ( i = 1, 1, sizeof( inter_pts ),
  231.     pt = ceval( crv1, coord( nth( inter_pts, i ), 0 ) ):
  232.     snoc( pt, pt_inters )
  233.     );
  234. interact( list( axes, crv1, pt_inters ) );
  235. dist_srf = ccinter( crv1, crv1, -1, true );
  236. color( dist_srf, magenta );
  237. interact( list( axes, dist_srf ) );
  238.  
  239. free(inter_pts);
  240. free(pt_inters);
  241. free(crv1);
  242. free(crv2);
  243.  
  244.